package com.itheima.d5_tcp2;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 *  目标：完成TCP通信快速入门-客户端开发：实现客户端可以反复的发消息出去
 *
 * 使用TCP通信实现：多发多收消息
 *  使用TCP通信实现：多发多收消息。
 * 客户端使用死循环，让用户不断输入消息。
 * 服务端也使用死循环，控制服务端收完消息，继续等待接收下一个消息。
 *
 *
 */
public class Client {
    public static void main(String[] args) throws Exception {
        // 1、创建Socket对象，并同时请求与服务端程序的连接。
        Socket socket = new Socket("127.0.0.1", 8888);

        // 2、从socket通信管道中得到一个字节输出流，用来发数据给服务端程序。
        OutputStream os = socket.getOutputStream();

        // 3、把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        //让客户端决定想发什么就发什么信息
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请说：");
            String msg = sc.nextLine();

            // 一旦用户输入了exit，就退出客户端程序
            if("exit".equals(msg)){
                System.out.println("欢迎您下次光临！退出成功！");
                dos.close();
                socket.close();
                break;
            }

            // 4、开始写数据出去了
            dos.writeUTF(msg);

            //把数据刷新出去，防止这个数据还在客户端的内存中，就是立即发送给服务端的意思
            //弹幕：字符流需要刷新,字符流会创建缓冲区,所以需要刷新,字节流不需要刷新.
            dos.flush();
        }
    }
}
